const COMM = require('../common/comm')

/********* method	HTTP 请求方法 *******
    OPTIONS	HTTP 请求 OPTIONS
    GET	    HTTP 请求 GET
    HEAD	HTTP 请求 HEAD
    POST	HTTP 请求 POST
    PUT	    HTTP 请求 PUT
    DELETE	HTTP 请求 DELETE
    TRACE	HTTP 请求 TRACE
    CONNECT	HTTP 请求 CONNECT
*/

function checkContentType(contentType) {
    switch (contentType) {
        case 'form':
            return 'application/x-www-form-urlencoded';
        default:
            return 'application/json';
    }
}

function axios(method, interfaceName, data, contentType) {
    const requestInfo = `method:${method}, interfaceName:${interfaceName}, data:${data}`;
    return new Promise((resolve, reject) => {
        wx.showLoading({title: '加载中'})
        wx.request({
            url: COMM.baseUrl + interfaceName, //仅为示例，并非真实的接口地址
            data: data,
            method: method,
            header: { 'content-type': checkContentType(contentType) },        // 默认值
            success(res) {
                /**********************************************
                    // 开发者服务器返回的数据
                    res.data
                    // number	开发者服务器返回的 HTTP 状态码
                    res.statusCode
                    // Object	开发者服务器返回的 HTTP Response Header	1.2.0 
                    res.header
                    // Array.<string>	开发者服务器返回的 cookies，格式为字符串数组	2.10.0
                    res.cookies
                    // Object	网络请求过程中一些调试信息，查看详细说明	2.10.4
                    res.profile
                    // Object	网络请求过程中的一些异常信息，例如httpdns重试等	3.0.0
                    res.exception
                ******************************************************/
                if (res.statusCode == COMM.HttpStatus.OK) {
                    console.log(`====requestinfo:${requestInfo}====`);
                    console.log("====res.data:", res.data);
                    const { code, msg, data } = res.data;
                    if (code === -1) {
                        console.log(`${requestInfo} faild, msg: ${msg}`);
                        reject(msg);
                    }
                    resolve(data);
                } else {
                    wx.hideLoading()
                    wx.showToast({
                        title:'请求失败: ' + res.statusCode,
                        icon: 'error'
                      })
                }
                wx.hideLoading()
            },
            fail(err) {
                // errMsg String 错误信息; errno Number	错误码，错误码的详细说明参考 Errno错误码	2.24.0
                console.log(`${requestInfo} faild, errmsg:${err.errMsg}, errno: ${err.errno}`);
                reject(err);
                wx.hideLoading()
                wx.showToast({
                  title:'请求失败: ' + err.errMsg,
                })
            }
        });
    });
}

function get(interfaceName, data, contentType) {
    return axios('GET', interfaceName, data, contentType)
}

function post(interfaceName, data, contentType) {
    return axios('POST', interfaceName, data, contentType)
}

module.exports = {
    post,
    get,
}